home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / usb_otg.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  119 lines

  1. // include/linux/usb_otg.h 
  2.  
  3. /*
  4.  * These APIs may be used between USB controllers.  USB device drivers
  5.  * (for either host or peripheral roles) don't use these calls; they
  6.  * continue to use just usb_device and usb_gadget.
  7.  */
  8.  
  9.  
  10. /* OTG defines lots of enumeration states before device reset */
  11. enum usb_otg_state {
  12.     OTG_STATE_UNDEFINED = 0,
  13.  
  14.     /* single-role peripheral, and dual-role default-b */
  15.     OTG_STATE_B_IDLE,
  16.     OTG_STATE_B_SRP_INIT,
  17.     OTG_STATE_B_PERIPHERAL,
  18.  
  19.     /* extra dual-role default-b states */
  20.     OTG_STATE_B_WAIT_ACON,
  21.     OTG_STATE_B_HOST,
  22.  
  23.     /* dual-role default-a */
  24.     OTG_STATE_A_IDLE,
  25.     OTG_STATE_A_WAIT_VRISE,
  26.     OTG_STATE_A_WAIT_BCON,
  27.     OTG_STATE_A_HOST,
  28.     OTG_STATE_A_SUSPEND,
  29.     OTG_STATE_A_PERIPHERAL,
  30.     OTG_STATE_A_WAIT_VFALL,
  31.     OTG_STATE_A_VBUS_ERR,
  32. };
  33.  
  34. /*
  35.  * the otg driver needs to interact with both device side and host side
  36.  * usb controllers.  it decides which controller is active at a given
  37.  * moment, using the transceiver, ID signal, HNP and sometimes static
  38.  * configuration information (including "board isn't wired for otg").
  39.  */
  40. struct otg_transceiver {
  41.     struct device        *dev;
  42.     const char        *label;
  43.  
  44.     u8            default_a;
  45.     enum usb_otg_state    state;
  46.  
  47.     struct usb_bus        *host;
  48.     struct usb_gadget    *gadget;
  49.  
  50.     /* to pass extra port status to the root hub */
  51.     u16            port_status;
  52.     u16            port_change;
  53.  
  54.     /* bind/unbind the host controller */
  55.     int     (*set_host)(struct otg_transceiver *otg,
  56.                 struct usb_bus *host);
  57.  
  58.     /* bind/unbind the peripheral controller */
  59.     int    (*set_peripheral)(struct otg_transceiver *otg,
  60.                 struct usb_gadget *gadget);
  61.  
  62.     /* effective for B devices, ignored for A-peripheral */
  63.     int    (*set_power)(struct otg_transceiver *otg,
  64.                 unsigned mA);
  65.  
  66.     /* for B devices only:  start session with A-Host */
  67.     int    (*start_srp)(struct otg_transceiver *otg);
  68.  
  69.     /* start or continue HNP role switch */
  70.     int    (*start_hnp)(struct otg_transceiver *otg);
  71.  
  72. };
  73.  
  74.  
  75. /* for board-specific init logic */
  76. extern int otg_set_transceiver(struct otg_transceiver *);
  77.  
  78.  
  79. /* for usb host and peripheral controller drivers */
  80. extern struct otg_transceiver *otg_get_transceiver(void);
  81.  
  82. static inline int
  83. otg_start_hnp(struct otg_transceiver *otg)
  84. {
  85.     return otg->start_hnp(otg);
  86. }
  87.  
  88.  
  89. /* for HCDs */
  90. static inline int
  91. otg_set_host(struct otg_transceiver *otg, struct usb_bus *host)
  92. {
  93.     return otg->set_host(otg, host);
  94. }
  95.  
  96.  
  97. /* for usb peripheral controller drivers */
  98. static inline int
  99. otg_set_peripheral(struct otg_transceiver *otg, struct usb_gadget *periph)
  100. {
  101.     return otg->set_peripheral(otg, periph);
  102. }
  103.  
  104. static inline int
  105. otg_set_power(struct otg_transceiver *otg, unsigned mA)
  106. {
  107.     return otg->set_power(otg, mA);
  108. }
  109.  
  110. static inline int
  111. otg_start_srp(struct otg_transceiver *otg)
  112. {
  113.     return otg->start_srp(otg);
  114. }
  115.  
  116.  
  117. /* for OTG controller drivers (and maybe other stuff) */
  118. extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
  119.